package bean;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.html.HtmlInputText;
import javax.faces.component.html.HtmlOutputText;

import mensagem.MsgFornecedor;
import session.SessionCidade;
import session.SessionCondPagamento;
import session.SessionFornecedor;
import entity.Cidade;
import entity.CondPagamento;
import entity.Fornecedor;

@ManagedBean
@SessionScoped
public class BeanFornecedor {

	private Fornecedor fornecedor = new Fornecedor();

	private List<Fornecedor> fornecedores = new ArrayList<Fornecedor>();

	private Fornecedor selected = new Fornecedor();

	private Fornecedor filtro = new Fornecedor();

	private SessionFornecedor session = new SessionFornecedor();

	private SessionCidade sessionC = new SessionCidade();

	private SessionCondPagamento sessionCond = new SessionCondPagamento();

	private HtmlInputText nomeCidade;

	private HtmlInputText condicao;

	private HtmlOutputText nome;

	private HtmlOutputText cnpj;
	
	private HtmlOutputText rg;

	private HtmlOutputText apelido;

	private String inicia;

	// //////////////////////////CONSTRUCTOR//////////////////////////////////////
	// ///////////////////////////////////////////////////////////////////////////

	public BeanFornecedor() {
		this.fornecedor.setTipoFornecedor("J");
	}

	// //////////////////////////CONSTRUCTOR//////////////////////////////////////
	// ///////////////////////////////////////////////////////////////////////////

	public String getInicia() {
		this.reinit();
		return inicia;
	}

	public HtmlOutputText getCnpj() {
		return cnpj;
	}

	public void setCnpj(HtmlOutputText cnpj) {
		this.cnpj = cnpj;
	}

	public HtmlOutputText getRg() {
		return rg;
	}

	public void setRg(HtmlOutputText rg) {
		this.rg = rg;
	}

	public HtmlOutputText getNome() {
		return nome;
	}

	public void setNome(HtmlOutputText nome) {
		this.nome = nome;
	}

	public HtmlOutputText getApelido() {
		return apelido;
	}

	public void setApelido(HtmlOutputText apelido) {
		this.apelido = apelido;
	}

	public void setInicia(String inicia) {
		this.inicia = inicia;
	}

	public Fornecedor getFornecedor() {
		return fornecedor;
	}

	public SessionCondPagamento getSessionCond() {
		return sessionCond;
	}

	public void setSessionCond(SessionCondPagamento sessionCond) {
		this.sessionCond = sessionCond;
	}

	public HtmlInputText getCondicao() {
		return condicao;
	}

	public void setCondicao(HtmlInputText condicao) {
		this.condicao = condicao;
	}

	public SessionCidade getSessionC() {
		return sessionC;
	}

	public void setSessionC(SessionCidade sessionC) {
		this.sessionC = sessionC;
	}

	public HtmlInputText getNomeCidade() {
		return nomeCidade;
	}

	public void setNomeCidade(HtmlInputText nomeCidade) {
		this.nomeCidade = nomeCidade;
	}

	public void setFornecedor(Fornecedor fornecedor) {
		this.fornecedor = fornecedor;
	}

	public List<Fornecedor> getFornecedores() {
		return fornecedores;
	}

	public void setFornecedores(List<Fornecedor> fornecedores) {
		this.fornecedores = fornecedores;
	}

	public Fornecedor getSelected() {
		return selected;
	}

	public void setSelected(Fornecedor selected) {
		this.selected = selected;
	}

	public Fornecedor getFiltro() {
		return filtro;
	}

	public void setFiltro(Fornecedor filtro) {
		this.filtro = filtro;
	}

	public SessionFornecedor getSession() {
		return session;
	}

	public void setSession(SessionFornecedor session) {
		this.session = session;
	}

	// ******************************METODOS******************************
	// ***********************************************************************************
	// ******************************************************************************************

	public void reinit() {
		this.setFiltro(new Fornecedor());
		this.setFornecedor(new Fornecedor());
		this.setFornecedores(new ArrayList<Fornecedor>());
		this.setSelected(new Fornecedor());
		this.nomeCidade.setValue("");
		this.condicao.setValue("");
		this.fornecedor.setTipoFornecedor("J");
	}

	public String save() throws Exception {
		if (this.fornecedor.getId() != null) {
			this.update();
			return null;
		} else {
			if (this.session.save(fornecedor)) {
				this.reinit();
				MsgFornecedor.msgSave();
				return null;
			}
		}
		return null;
	}

	public String update() throws Exception {
		if (this.session.update(fornecedor)) {
			return MsgFornecedor.msgUpdate();
		}
		return null;
	}

	public String remove() {
		try {
			this.session.remove(fornecedor);
			MsgFornecedor.msgRemove();
		} catch (Exception e) {
			MsgFornecedor.msgNotRemove();
		}
		return null;
	}

	public void find() throws Exception {
		this.setFornecedores(this.session.find(filtro));
	}

	public String hotFindCidade() {
		if (this.fornecedor.getCidade() != null) {
			if ((this.fornecedor.getCidade().getId() != null)
					&& (this.fornecedor.getCidade().getCidade() != null)) {
				int aux = this.fornecedor.getCidade().getId();
				this.fornecedor.setCidade(new Cidade());
				this.fornecedor.getCidade().setId(aux);
			}
		}

		if ((this.fornecedor.getCidade() != null)
				&& (this.fornecedor.getCidade().getId() != null)) {
			try {
				this.fornecedor.setCidade(this.sessionC.getController().find(
						this.fornecedor.getCidade()));
			} catch (Exception e) {
				this.fornecedor.setCidade(new Cidade());
			}
			if ((this.fornecedor.getCidade() != null)
					&& (fornecedor.getCidade().getCidade() != null)) {
				this.nomeCidade.setValue(fornecedor.getCidade().getCidade());
				return null;
			}
		}
		this.fornecedor.setCidade(new Cidade());
		return null;
	}

	public String hotFindCondPagamento() {
		if (this.fornecedor.getCondPagamento() != null) {
			if ((this.fornecedor.getCondPagamento().getId() != null)
					&& (this.fornecedor.getCondPagamento().getDescricao() != null)) {
				int aux = this.fornecedor.getCondPagamento().getId();
				this.fornecedor.setCondPagamento(new CondPagamento());
				this.fornecedor.getCondPagamento().setId(aux);
			}
		}

		if ((this.fornecedor.getCondPagamento() != null)
				&& (this.fornecedor.getCondPagamento().getId() != null)) {
			try {
				this.fornecedor.setCondPagamento(this.sessionCond
						.getController().find(
								this.fornecedor.getCondPagamento()));
			} catch (Exception e) {
				this.fornecedor.setCondPagamento(new CondPagamento());
			}
			if ((this.fornecedor.getCondPagamento() != null)
					&& (this.fornecedor.getCondPagamento().getDescricao() != null)) {
				this.condicao.setValue(this.fornecedor.getCondPagamento()
						.getDescricao());
				return null;
			}
		}
		this.fornecedor.setCondPagamento(new CondPagamento());
		return null;
	}

	public void changeType() {
		if (this.fornecedor.getTipoFornecedor().equals("J")) {
			this.apelido.setValue("Nome Fantasia");
			this.nome.setValue("Fornecedor *");
			this.cnpj.setValue("CNPJ *");
			this.rg.setValue("Inscricao Estadual *");
		} else {
			this.rg.setValue("RG *");
			this.cnpj.setValue("CPF *");
			this.nome.setValue("Nome *");
			this.apelido.setValue("Apelido");
		}
	}
}
